如何在 Linux 上使用 uniq 命令

您所在的位置:网站首页 vim uniq 如何在 Linux 上使用 uniq 命令

如何在 Linux 上使用 uniq 命令

2024-07-11 04:00| 来源: 网络整理| 查看: 265

如何在 Linux 上使用 uniq 命令

Linux uniq 命令快速浏览您的文本文件以查找唯一或重复的行。在本指南中,我们介绍了它的多功能性和功能,以及如何充分利用这个漂亮的实用程序。

在 Linux 上查找匹配的文本行

uniq 命令快速、灵活且功能强大。但是,与许多 Linux 命令一样,它也有一些怪癖——这很好,只要您了解它们即可。如果你在没有一点内幕知识的情况下冒险,你很可能会对结果感到摸不着头脑。我们会在进行时指出这些怪癖。

uniq 命令非常适合那些一心一意、只做一件事并做好的人。这就是为什么它也特别适合与管道一起工作并在命令管道中发挥作用的原因。 sort 是它最频繁的合作者之一,因为 uniq 必须对要处理的输入进行排序。

让我们点燃它!

不带任何选项运行 uniq

我们有一个文本文件,其中包含 Robert Johnson 歌曲 I Believe I'll Dust My Broom 的歌词。让我们看看 uniq 是如何构成的。

我们将键入以下内容以将输出通过管道传输到 less:

uniq dust-my-broom.txt | less

我们在 less 中获取整首歌,包括重复的行:

这似乎既不是唯一行也不是重复行。

对——因为这是第一个怪癖。如果您不带任何选项运行 uniq,它的行为就好像您使用了 -u(唯一行)选项一样。这告诉 uniq 只打印文件中唯一的行。您看到重复行的原因是,要将 uniq 视为重复行,它必须与其重复行相邻,这就是 sort 的用武之地。

当我们对文件进行排序时,它会将重复的行分组,并且 uniq 将它们视为重复项。我们将对文件使用 sort,将排序后的输出通过管道传输到 uniq,然后将最终输出通过管道传输到 less。

为此,我们键入以下内容:

sort dust-my-broom.txt | uniq | less

排序后的行列表出现在 less 中。

“我相信我会掸去扫帚上的灰尘”这句台词肯定不止一次出现在这首歌中。事实上,它在歌曲的前四行中重复了两次。

那么,为什么它会出现在唯一行列表中?因为一行第一次出现在文件中,它是唯一的;只有后续条目是重复的。您可以将其视为列出每个唯一行的第一次出现。

让我们再次使用 sort 并将输出重定向到一个新文件中。这样,我们就不必在每个命令中都使用 sort。

我们输入以下命令:

sort dust-my-broom.txt > sorted.txt

现在,我们有一个预排序的文件可以使用。

计算重复项

您可以使用 -c(计数)选项打印每行在文件中出现的次数。

键入以下命令:

uniq -c sorted.txt | less

每行以该行在文件中出现的次数开头。但是,您会注意到第一行是空白的。这告诉您文件中有五个空行。

如果您希望输出按数字顺序排序,您可以将 uniq 的输出提供给 sort。在我们的示例中,我们将使用 -r(反向)和 -n(数字排序)选项,并将结果通过管道传输到 less .

我们键入以下内容:

uniq -c sorted.txt | sort -rn | less

该列表根据每行出现的频率降序排列。

仅列出重复行

如果只想查看文件中重复的行,可以使用 -d(重复)选项。无论一行在文件中重复多少次,它都只列出一次。

要使用此选项,我们键入以下内容:

uniq -d sorted.txt

为我们列出了重复的行。您会注意到顶部的空白行,这意味着该文件包含重复的空白行——它不是 uniq 留下的空间来美化列表。

我们还可以组合 -d(重复)和 -c(计数)选项,并通过 sort 管道输出。这为我们提供了至少出现两次的行的排序列表。

键入以下内容以使用此选项:

uniq -d -c sorted.txt | sort -rn列出所有重复的行

如果您想查看每个重复行的列表,以及文件中每次出现的行的条目,您可以使用 -D(所有重复行)选项。

要使用此选项,请键入以下内容:

uniq -D sorted.txt | less

该列表包含每个重复行的条目。

如果您使用 --group 选项,它会在每个组之前(prepend)或之后(append)打印每个重复行和一个空行),或前后 (both) 每组。

我们使用 append 作为我们的修饰符,所以我们输入以下内容:

uniq --group=append sorted.txt | less

这些组由空行分隔,以便于阅读。

检查一定数量的字符

默认情况下,uniq 检查每行的整个长度。但是,如果要将检查限制为特定数量的字符,则可以使用 -w(检查字符)选项。

在此示例中,我们将重复最后一个命令,但将比较限制为前三个字符。为此,我们键入以下命令:

uniq -w 3 --group=append sorted.txt | less

我们收到的结果和分组非常不同。

所有以“I b”开头的行被组合在一起,因为这些行的那些部分是相同的,所以它们被认为是重复的。

同样,所有以“I'm”开头的行都被视为重复,即使文本的其余部分不同。

忽略一定数量的字符

在某些情况下,在每行的开头跳过一定数量的字符可能会有好处,例如当文件中的行被编号时。或者,假设您需要 uniq 来跳过时间戳并从字符 6 开始检查行,而不是从第一个字符开始。

下面是我们带有编号行的排序文件的一个版本。

如果我们希望 uniq 在字符 3 开始比较检查,我们可以通过键入以下命令来使用 -s(跳过字符)选项:

uniq -s 3 -d -c numbered.txt

这些行被检测为重复项并正确计数。请注意,显示的行号是每个重复项第一次出现的行号。

您还可以跳过字段(一串字符和一些空格)而不是字符。我们将使用 -f(字段)选项来告诉 uniq 要忽略哪些字段。

我们键入以下内容来告诉 uniq 忽略第一个字段:

uniq -f 1 -d -c  numbered.txt

我们得到的结果与我们告诉 uniq 在每行开头跳过三个字符时得到的结果相同。

忽略大小写

默认情况下,uniq 区分大小写。如果同一个字母以大写和小写形式出现,uniq 会认为这些行不同。

例如,检查以下命令的输出:

uniq -d -c sorted.txt | sort -rn

“I Believe I'll dust my broom”和“I believe I'll dust my broom”这两行不被视为重复,因为“相信”中“B”的大小写不同。

但是,如果我们包含 -i(忽略大小写)选项,这些行将被视为重复行。我们键入以下内容:

uniq -d -c -i sorted.txt | sort -rn

这些行现在被视为重复项并组合在一起。

Linux 提供了大量的特殊实用程序供您使用。与其中许多工具一样,uniq 并不是您每天都会使用的工具。

这就是为什么精通 Linux 的很大一部分是记住哪个工具可以解决您当前的问题,以及您可以在哪里找到它。但是,如果你练习,你会很顺利。

或者,您可以随时搜索 How-To Geek——我们可能有一篇关于它的文章。

Linux Commands Files tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc Processes alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap Networking netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld

RELATED: Best Linux Laptops for Developers and Enthusiasts



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3